import java.util.Random;

//给定一个很长的数组 (长度 1000w), 通过随机数的方式生成 1-100 之间的整数.
//        实现代码, 能够创建两个线程, 对这个数组的所有元素求和.
//        其中线程1 计算偶数下标元素的和, 线程2 计算奇数下标元素的和.
//        最终再汇总两个和, 进行相加
//记录程序的执行时间.
public class Test01 {

    public static final int ARRAY_SIZE = 1000_0000;
    public static final int SIZE_MAX = 100;

    public static void main(String[] args) throws InterruptedException {
        //开始时间
        long start = System.currentTimeMillis();

        //数组
        int[] array = new int[ARRAY_SIZE];
        //构造随机数,填充数组
        Random random = new Random();
        for (int i = 0; i < ARRAY_SIZE; i++) {
            array[i] = random.nextInt(SIZE_MAX) + 1;
        }


        final long[] ret = new long[2];
        //创建线程一，计算偶数下标和
        Thread t1 = new Thread(() -> {
            long ret1 = 0;
            for (int i = 0; i < ARRAY_SIZE; i += 2) {
                ret1 += array[i];
            }
            ret[0] = ret1;
            System.out.println("偶数下标的和：" + ret1);
        });

        //创建线程二，计算奇数下标和
        Thread t2 = new Thread(() -> {
            long ret2 = 0;
            for (int i = 1; i < ARRAY_SIZE; i += 2) {
                ret2 += array[i];
            }
            ret[1] = ret2;
            System.out.println("奇数下标的和：" + ret2);
        });

        //启动线程
        t1.start();
        t2.start();
        //等待线程结束
        t1.join();
        t2.join();

        System.out.println("总和：" + (ret[0] + ret[1]));

        //结束时间
        long end = System.currentTimeMillis();

        System.out.println("总耗时：" + (end - start) + "ms.");

    }
}
